
/*-------------------------------------------------------------------------
 *
 * fmgrtab.h
 *	  函数管理器的内部函数表。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/utils/fmgrtab.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef FMGRTAB_H
#define FMGRTAB_H

#include "access/transam.h"
#include "fmgr.h"


/*
 * 此表存储关于所有内置函数的信息（即编译到 Postgres 可执行文件中的函数）。
 */

typedef struct
{
	Oid			foid;			/* 函数的 OID */
	short		nargs;			/* 0..FUNC_MAX_ARGS，或 -1 如果是可变计数 */
	bool		strict;			/* 如果函数是 "严格"，则为 T */
	bool		retset;			/* 如果函数返回一个集合，则为 T */
	const char *funcName;		/* 函数的 C 名称 */
	PGFunction	func;			/* 指向编译函数的指针 */
} FmgrBuiltin;

extern PGDLLIMPORT const FmgrBuiltin fmgr_builtins[];

extern PGDLLIMPORT const int fmgr_nbuiltins;	/* 表中的条目数量 */

extern PGDLLIMPORT const Oid fmgr_last_builtin_oid; /* 表中最高的函数 OID */

/*
 * 从内置函数的 OID 到其在 fmgr_builtins
 * 数组中的索引的映射。该索引从 0 到 fmgr_last_builtin_oid。
 */
#define InvalidOidBuiltinMapping PG_UINT16_MAX
extern PGDLLIMPORT const uint16 fmgr_builtin_oid_index[];

#endif							/* FMGRTAB_H */
